# 作者: 菅世博
# 2025年02月18日15时56分46秒
# 512326042@qq.com

xiaoming_dict = {"name": "小明"}

print(f'最初的id = {id(xiaoming_dict)}')

# 1. 取值
print(xiaoming_dict["name"])
# 在取值的时候，如果指定的 key 不存在，程序会报错！
# print(xiaoming_dict["name123"])
print(xiaoming_dict.get("name123"))  # None


def use_insert():
    # 2. 增加/修改
    # 如果 key 不存在，会新增键值对
    xiaoming_dict["age"] = 18
    # 如果 key 存在，会修改已经存在的键值对
    # xiaoming_dict.setdefault("name", "小小明")
    xiaoming_dict["name"] = "小小明"
    print(xiaoming_dict)


def use_pop():
    # 3. 删除
    xiaoming_dict.pop("name")
    # 在删除指定键值对的时候，如果指定的 key 不存在，程序会报错！
    # xiaoming_dict.pop("name123")
    print(xiaoming_dict)
    print(f'最终的id = {id(xiaoming_dict)}')
    print('-' * 50)

def use_update():
    xiaoming_dict = {"name": "小明", "age": 18}
    # 1. 统计键值对数量
    print(len(xiaoming_dict))
    # 2. 合并字典
    temp_dict = {"height": 1.75, "age": 20}
    # 注意：如果被合并的字典中包含已经存在的键值对，会覆盖原有的键值对
    xiaoming_dict.update(temp_dict)
    print(xiaoming_dict)

def use_clear():
    # 3. 清空字典
    xiaoming_dict.clear()
    print(xiaoming_dict)
    print('-' * 50)


def use_dict_iter():
    xiaoming_dict = {"name": "小明",
                     "qq": "123456",
                     "phone": "10086"}
    for key in xiaoming_dict:
        print(f'{key}: {xiaoming_dict[key]}')

    for kv in xiaoming_dict.items():
        print(kv)


def use_card_list():
    """
    列表嵌套字典
    使用多个键值对，存储描述一个物体的相关信息 —— 描述更复杂的数据信息
    将多个字典放在一个列表中，再进行遍历
    :return:
    """
    card_list = [
        {"name": "张三",
         "qq": "12345",
         "phone": "110"},
        {"name": "李四",
         "qq": "54321",
         "phone": "10086"}
    ]
    for card_info in card_list:  # card_info是一个字典
        for k, v in card_info.items():  # items()返回的是元组
            print(k, v)
        print('-' * 50)


# use_insert()
# use_pop()
# use_update()
# use_clear()
# use_dict_iter()
use_card_list()
